/**********************************************************************/
/* Programa: COMPRESOR 
Este programa es el encargado de las pruebas de las TDA's del tp de 
* Organización de datos
Integrantes        : Catalina Windmuller, Ayelén Tamiozzo y Francisco Soler               
Fecha              : 17 de abril de 2011                                 
Versión            : 01                                                     
Nombre del archivo : prueba.c */

/**********************************************************************/
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h> 
#include <string.h>
#include "lista.h"
#include "cola.h"

/**********************************************************************/
void probar_cola(){
	tcola cola;
	int elem1;
	tdatoc ele1,ele2;
	elem1 = 5;
	ele1 = (tdatoc) malloc(sizeof(int));
	ele2 = (tdatoc) malloc(sizeof(int));
	*(int*) ele1 = elem1;
	printf ("testeando la colaa...\n");
	printf("\t1.crear cola........................");
	if(crear_cola(&cola))
		printf("ok\n");
	else
		printf("fail\n");
	printf ("\t2.insertar dato en la cola..........");
	if (insertar_cola(&cola, ele1))
		printf("ok\n");
	else
		printf("fail\n");
	printf("\t3.ver frente........................");
	if (ver_frente(cola,&ele2)&& ((*(int*)ele1)==(*(int*)ele2)))
		printf("ok\n");
	else
		printf ("fail\n");
	printf("\t4.desencolar dato...................");
	if (borrar_cola(&cola,&ele2)&& ((*(int*)ele1)==(*(int*)ele2)))
		printf("ok\n");
	else
		printf ("fail\n");
	printf("\t5.¿cola vacía?......................");
	if (cola_vacia(cola))
		printf ("ok\n");
	else
		printf("fail\n");
	printf ("\t6.destruir cola.....................");
	if (destruir_cola(&cola))
		printf("ok\n");
	else
		printf("fail\n");
	printf("presine cualquier letra para continuar\n\n");
	getchar();
	
}

bool mi_destruir (tdatol dato) {
	free(dato);
	return true;
}

/**********************************************************************/

void probar_lista(){
	tlista lista;
	tlista_iter iter;
	tdatol elem1,elem2,elem3;
	elem1= (tdatol) malloc(sizeof (int));
	*(int*)elem1 = 5;
	elem2= (tdatol) malloc(sizeof (int));
	*(int*)elem2 = 6;
	elem3= (tdatol) malloc(sizeof (int));
	printf ("testeando la lista...\n");
	printf("\t1.crear lista e iterador............");
	if( crear_lista(&lista) && crear_lista_iter(&lista,&iter))
		printf("ok\n");
	else
		printf("fail\n");
	printf ("\t2.insertar dato en la lista.........");
	if (insertar_lista_primero(&lista,elem1))
		printf("ok\n");
	else
		printf("fail\n");
	printf("\t3.insertar elemento y ver el 1ero...");
	crear_lista_iter(&lista,&iter);
	avanzar_lista_iter(&iter);
	insertar_lista(&lista,&iter,elem2);
	crear_lista_iter(&lista,&iter);
	if (ver_lista_actual(&iter,&elem3)&& *(int*)elem3==*(int*)elem1)
		printf("ok\n");
	else
		printf ("fail\n");
	printf("\t4.delistar segundo dato.............");
	crear_lista_iter(&lista,&iter);
	if (avanzar_lista_iter(&iter)&& borrar_lista(&lista,&iter,&(elem3)) && *(int*)elem3==*(int*)elem2)
		printf("ok\n");
	else
		printf ("fail\n");
	printf("\t5.¿lista vacía?.....................");
	if (!lista_vacia(lista))
		printf ("ok\n");
	else
		printf("fail\n");
	printf ("\t6.destruir lista....................");
	if (destruir_lista(&lista, mi_destruir))
		printf("ok\n");
	else
		printf("fail\n");
	printf("presine cualquier letra para continuar\n\n");
	getchar();
}

/**********************************************************************/
int main(){
	
	probar_cola ();
	probar_lista ();
	return (0);
}
